﻿<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>DirSelect - 语法 &amp; 使用 | AutoHotkey v2</title>
<meta name="description" content="The DirSelect function displays a standard dialog that allows the user to select a folder." />
<meta name="ahk:equiv-v1" content="commands/FileSelectFolder.htm" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
</head>
<body>

<h1>DirSelect</h1>

<p>显示可以让用户选择文件夹的标准对话框.</p>

<pre class="Syntax">SelectedFolder := <span class="func">DirSelect</span>(<span class="optional">StartingFolder, Options, Prompt</span>)</pre>
<h2 id="Parameters">参数</h2>
<dl>

  <dt>StartingFolder</dt>
  <dd>
      <p>类型: <a href="../Concepts.htm#strings">字符串</a></p>
      <p>如果为空或省略, 则对话框的初始选择为用户的我的文档文件夹(或可能是我的电脑). 可以指定 <a href="../misc/CLSID-List.htm">CLSID 文件夹</a>, 如 <code>"::{20d04fe0-3aea-1069-a2d8-08002b30309d}"</code>(即我的电脑) 来从特定的专用文件夹开始导航.</p>
      <p>否则, 此参数最常见的用法是星号后面紧跟着初始选择的驱动器或文件夹的绝对路径. 例如, <code>"*C:\"</code> 会初始选择 C 驱动器. 同样地, <code>"*C:\My Folder"</code> 会初始选择这个特殊的文件夹.</p>
      <p>星号表示允许用户从起始文件夹向上导航(接近根目录). 如果没有星号, 则强制用户在 <em>StartingFolder</em>(或 <em>StartingFolder</em> 自身) 中选择文件夹. 省略星号的一个好处是最初 <em>StartingFolder</em> 会显示为树形展开状态, 这样可以节省用户点击前面加号的时间.</p>
      <p>如果有星号, 向上导航也可以选择限制在桌面以外的文件夹中. 这是通过在星号前面加上最顶层文件夹的绝对路径, 后面正好是一个空格或制表符来实现的. 在下面的例子中, 将不允许用户导航到比 C:\My Folder 更上级的文件夹(不过初始选择为 C:\My Folder\Projects):<br>
      <code>"C:\My Folder *C:\My Folder\Projects"</code></p>
    </dd>

  <dt>Options</dt>
  <dd>
      <p>类型: <a href="../Concepts.htm#numbers">整数</a></p>
      <p>下列数字的其中一个:</p>
      <p><strong>0</strong>: 禁用下面所有选项.</p>
      <p><strong>1</strong>(默认): 提供允许用户新建文件夹的按钮.</p>
      <p><strong>加 2</strong> 到上面的数字来提供允许用户输入文件夹名称的编辑区域. 例如, 此参数值为 3 表示同时提供编辑区域和 "新建文件夹" 按钮.</p>
      <p id="NewDialog"><strong>加 4</strong> 到上面的数字来忽略 BIF_NEWDIALOGSTYLE 属性. 加 4 确保了 DirSelect 即使在像 WinPE 或 BartPE 这样的预安装环境中也能正常工作. 然而, 这样阻止了 "新建文件夹" 按钮的出现.</p>
      <p>如果用户在编辑区域中输入了无效的文件夹名称, 则 <em>SelectedFolder</em> 会被设置为在导航树中选择的文件夹而不是用户输入的内容.</p>
  </dd>

  <dt>Prompt</dt>
  <dd>
      <p>类型: <a href="../Concepts.htm#strings">字符串</a></p>
      <p>显示在窗口中用来提示用户操作的文本. 如果省略或为空, 则它默认为 <code>"Select Folder - " <a href="../Variables.htm#ScriptName">A_ScriptName</a></code>(即当前脚本的名称).</p>
  </dd>

</dl>

<h2 id="Return_Value">返回值</h2>
<p>类型: <a href="../Concepts.htm#strings">字符串</a></p>
<p>此函数返回用户选择的文件夹的完整路径和名称. 如果用户取消对话框(即不希望选择文件夹), 则返回空字符串. 如果用户选择根目录(如 C:\), 则返回值将包含末尾的反斜杠. 如果不希望这样, 则使用如下方法移除它:</p>
<pre>Folder := RegExReplace(DirSelect(), "\\$")  <em>; 移除末尾的反斜杠, 如果存在.</em></pre>
<p>如果系统拒绝显示对话框, 也会返回一个空字符串, 但这是非常罕见的.</p>

<h2 id="Remarks">备注</h2>
<p>文件夹选择对话框通常看起来像这样:</p>
<img src="../static/dlg_folder.png" alt="DirSelect" />
<p>GUI 窗口可以使用 <a href="../objects/Gui.htm#OwnDialogs">+OwnDialogs</a> 选项的方法来显示模式文件夹选择对话框. 模式对话框在其消失之前会阻止用户与 GUI 窗口进行交互.</p>
<p>已知限制: 在显示 DirSelect 对话框期间启动的<a href="SetTimer.htm">计时器</a>将推迟用户在对话框中单击的效果, 直到计时器结束为止. 要解决此问题, 请避免使用子程序需要很长时间来完成的计时器, 或在显示对话框期间禁用所有计时器:</p>
<pre><a href="Thread.htm">Thread</a> "NoTimers"
SelectedFolder := DirSelect(, 3)
Thread "NoTimers", false</pre>
<h2 id="Related">相关</h2>
<p><a href="FileSelect.htm">FileSelect</a>, <a href="MsgBox.htm">MsgBox</a>, <a href="InputBox.htm">InputBox</a>, <a href="ToolTip.htm">ToolTip</a>, <a href="../objects/Gui.htm">GUI</a>, <a href="../misc/CLSID-List.htm">CLSID List</a>, <a href="DirCopy.htm">DirCopy</a>, <a href="DirMove.htm">DirMove</a>, <a href="SplitPath.htm">SplitPath</a></p>
<p>此外, 操作系统提供了标准的对话框让用户选取字体, 颜色或图标. 使用 <a href="DllCall.htm">DllCall</a> 可以显示这些对话框, 如 <a href="https://github.com/majkinetor/mm-autohotkey/tree/master/Dlg">GitHub</a> 所示.</p>
<h2 id="Examples">示例</h2>
<div class="ex" id="ExBasic">
<p><a href="#ExBasic">#1</a></p>
<pre>SelectedFolder := DirSelect(, 3)
if SelectedFolder = ""
    MsgBox "You didn't select a folder."
else
    MsgBox "You selected folder '" SelectedFolder "'."</pre>
</div>

<div class="ex" id="ExCLSID">
<p><a href="#ExCLSID">#2</a>: <a href="../misc/CLSID-List.htm">CLSID</a> 例子.</p>
<pre>SelectedFolder := DirSelect("::{20d04fe0-3aea-1069-a2d8-08002b30309d}")  <em>; 我的电脑.</em></pre>
</div>

</body>
</html>